package com.blog.article.controller;


import com.blog.article.entity.VO.BlogVO;
import com.blog.article.service.BlogService;
import com.blog.utils.JWTUtils;
import com.blog.utils.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;


import java.util.Map;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 苏离
 * @since 2021-12-10
 */
@RestController
@RequestMapping("/article")
@CrossOrigin("*")
public class  BlogController {
    @Autowired
    private BlogService blogService;

    /**创建文章
     *
     * @param blogVO
     * @param token
     * @return
     */
    @PostMapping("/create")
    public ResponseResult createArticle(@RequestBody BlogVO blogVO,
                                        @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        boolean article = blogService.createArticle(blogVO);
        if(article)
            return ResponseResult.ok().message("创建成功");
        else
            return ResponseResult.error().message("创建失败");
    }

    /**更新文章
     *
     * @param id
     * @param blogVO
     * @param token
     * @return
     */
    @PutMapping("/update/{id}")
    public ResponseResult updateArticle(@PathVariable("id") Integer id,
                                        @RequestBody BlogVO blogVO,
                                        @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        boolean article = blogService.updateArticle(blogVO);
        if(article)
            return ResponseResult.ok().message("更新成功");
        else
            return ResponseResult.error().message("更新失败");
    }

    /**
     * 根据文章id删除文章
     * @param id
     * @return
     */
    @DeleteMapping("/deleteArticle/{userId}/{id}")
    public ResponseResult deleteArticle(@PathVariable("id") Integer id,
                                        @PathVariable String userId,
                                        @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        if(blogService.deleteArticle(userId,id))
            return ResponseResult.ok();
        else
            return ResponseResult.error();
    }
    /**获取所有标签
     *
     * @param token
     * @return
     */
    @GetMapping("/tag")
    public ResponseResult getAllTags(@RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> tags = blogService.getTags();
        if (ObjectUtils.isEmpty(tags))
            return ResponseResult.error().message("标签库为空");
        return ResponseResult.ok().data(tags);
    }

    /**获取所有用户公开文章
     *
     * @param count
     * @return
     */
    @GetMapping("/all/{count}")
    public ResponseResult getBlogs(@PathVariable("count") Integer count){
        Map<String, Object> blogs = blogService.getBlog(count);
        return ResponseResult.ok().message("获取数据成功").data(blogs);
    }

    /**根据id获取用户所有公开文章
     *
     * @param id
     * @param count
     * @return
     */
    @GetMapping("/all/{id}/{count}")
    public ResponseResult getBlogsById(@PathVariable("id") String id,
                                       @PathVariable("count") Integer count){
        Map<String, Object> blogs = blogService.getBlogById(id, count);
        return ResponseResult.ok().message("获取数据成功").data(blogs);
    }

    /**根据tagId查询所有公开文章
     *
     * @param id
     * @param count
     * @return
     */
    @GetMapping("/tag/{id}/{count}")
    public ResponseResult getBlogsByTag(@PathVariable("id") Integer id,
                                        @PathVariable("count") Integer count){
        Map<String, Object> blogs = blogService.getBlogByTag(id,count);
        return ResponseResult.ok().message("获取数据成功").data(blogs);
    }

    /**
     * 更新views
     * @param userId
     * @param articleId
     * @return
     */
    @PutMapping("/view/{userId}/{articleId}")
    public ResponseResult updateViews(@PathVariable("userId") String userId,
                                      @PathVariable("articleId") Integer articleId){
        boolean b = blogService.updateViews(userId, articleId);
        if(b)
            return ResponseResult.ok().message("更新数据成功");
        return ResponseResult.ok().message("更新数据失败");
    }
    /** 根据用户id分页获取当前用户的所有文章
     *
     * @param userId
     * @param pageSize
     * @param limit
     * @param token
     * @return
     */
    @GetMapping("/userBlog/{user-id}/{page-size}/{limit}")
    public ResponseResult getUserBlogs(@PathVariable("user-id") String userId,
                                       @PathVariable("page-size") Integer pageSize,
                                       @PathVariable("limit") Integer limit,
                                       @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> blogs = blogService.getBlog(userId, pageSize,limit);
        if(ObjectUtils.isEmpty(blogs))
            return ResponseResult.ok().message("未查到文章").data("blogCount",0);
        else
            return ResponseResult.ok().message("获取数据成功").data(blogs);
    }

    /**根据id获取文章，限当前用户
     *
     * @param id
     * @param token
     * @return
     */
    @GetMapping("/detail/{id}")
    public ResponseResult getArticleById(@PathVariable("id") Integer id,
                                         @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> article = blogService.getArticleById(id);
        System.out.println(article);
        return ResponseResult.ok().message("获取成功").data(article);
    }

    /**根据id获取文章，所有用户
     *
     * @param id
     * @param token
     * @return
     */
    @GetMapping("/anyDetail/{id}")
    public ResponseResult getAnyArticleById(@PathVariable("id") Integer id,
                                            @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> article = blogService.getAnyArticleById(id);
        if(!ObjectUtils.isEmpty(article))
            return ResponseResult.ok().message("获取文章成功").data(article);
        return ResponseResult.error().message("获取文章失败");
    }

    /**
     * 根据文章标题模糊获取所有公开文章
     * @param title
     * @return
     */
    @GetMapping("/searchArticles")
    public ResponseResult searchArticle(String title){
        Map<String, Object> blogByTitle = blogService.getBlogByTitle(title);
        if (ObjectUtils.isEmpty(blogByTitle))
            return ResponseResult.error().message("获取失败");
        return ResponseResult.ok().data(blogByTitle);
    }

    /**
     * 分页获取用户文章
     * @param pageSize
     * @param limit
     * @param token
     * @return
     */
    @GetMapping("/userBlog/{page-size}/{limit}")
    public ResponseResult getAllBlog(
            @PathVariable("page-size") Integer pageSize,
            @PathVariable("limit") Integer limit,
            @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> blogs = blogService.getAllBlog(pageSize,limit);
        if(ObjectUtils.isEmpty(blogs))
            return ResponseResult.ok().message("未查到文章").data("blogCount",0);
        else
            return ResponseResult.ok().message("获取数据成功").data(blogs);
    }

    /**
     * 通过标题模糊查询所有文章
     * @param title
     * @param pageSize
     * @param limit
     * @param token
     * @return
     */
    @GetMapping("/getAllBlogByTitle/{title}/{page-size}/{limit}")
    public ResponseResult getAllBlogByTitle(
            @PathVariable("title") String title,
            @PathVariable("page-size") Integer pageSize,
            @PathVariable("limit") Integer limit,
            @RequestHeader("token") String token){
        if(!JWTUtils.checkToken(token)){
            return ResponseResult.error().message("用户登录信息过期,请重新登录");
        }
        Map<String, Object> blogs = blogService.getAllBlogByTitle(title,pageSize,limit);
        if(ObjectUtils.isEmpty(blogs))
            return ResponseResult.ok().message("未查到文章").data("blogCount",0);
        else
            return ResponseResult.ok().message("获取数据成功").data(blogs);
    }
}
